package cn.kgc.controller;

import cn.kgc.pojo.*;
import cn.kgc.service.BackUserService;
import cn.kgc.service.impl.BackUserServiceImpl;
import com.alibaba.fastjson.JSONArray;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
public class BackUserController {

        @Resource

        private BackUserService backUserService;

        @RequestMapping("/")
        public String index(){
            return "/homepage";
        }

    @RequestMapping("/backhomepage")
    public String backendlogin(){

        return "backendlogin";
    }

    @RequestMapping("/devlophomepage")
    public  String devloplogin(){

        return "devlogin";
    }
    /**
     * 后台管理用户的登陆方法。
     * @param devcode 用户输入的账号。
     * @param password  用户的密码。
     * @param session  丢出用户的信息或者错误信息。
     * @return
     * @throws Exception
     */

        @RequestMapping(value="/backlogin")
        public String doLogin(@RequestParam("devcode") String devcode, @RequestParam("password") String password,
                              HttpSession session) throws Exception {

        String loginName= backUserService.login(devcode, password);

          if(loginName==null){

             session.setAttribute("loginMessage","对不起，用户名或者密码不正确");

              return "/backendlogin";
          }
            session.setAttribute("backlogin",loginName);
            //直接重定向到查询所有的主页面
            return InternalResourceViewResolver.REDIRECT_URL_PREFIX+"/queryAllApp";
        }

    /**
     * 查询所有的方法
     * @param pageNumber 传入当前的页码数
     * @param querySoftwareName 模糊查询需要的参数
     * @param checkFlat 模糊查询需要的参数
     * @param queryLevel1 模糊查询需要的参数
     * @param queryCategoryLevel2 模糊查询需要的参数
     * @param queryCategoryLevel3 模糊查询需要的参数
     * @param index  代表错误信息
     * @param session
     * @return
     */
    @RequestMapping(value = "/queryAllApp")
    public  String queryAllApp(@RequestParam(value = "pageNumer",
            defaultValue = "1") String pageNumber,
            @RequestParam(value = "querySoftwareName",required = false) String querySoftwareName,
           @RequestParam(value = "checkFlat",required = false) String checkFlat,
           @RequestParam(value = "queryCategoryLevel1",required = false) String queryLevel1,
           @RequestParam(value = "queryCategoryLevel2",required = false) String queryCategoryLevel2,
           @RequestParam(value = "queryCategoryLevel3",required = false) String queryCategoryLevel3,
           @RequestParam(value = "index",required = false)String index,
           HttpSession session ){
        int pagesize=4;

        //根据传入的页码数，计算出应该从第几条用户信息开始显示
        int beginIndex=(Integer.parseInt(pageNumber)-1)*pagesize;

     //计算一共有多少数据
        int taotalCount=backUserService.totalCount(querySoftwareName,checkFlat,
                queryLevel1,queryCategoryLevel2,queryCategoryLevel3);
   //根据一共的数据和每页现实的数据去计算一共要分成多少页
        int tataoPage=taotalCount%pagesize>0?taotalCount/pagesize+1:taotalCount/pagesize;
     //调用查询所有的方法，返回的是一个Appinfo类型的list集合
        List<AppInfo> queryAllList=backUserService.queryALLApp(beginIndex,pagesize,
                querySoftwareName,checkFlat,queryLevel1,queryCategoryLevel2,queryCategoryLevel3);

        //定义一个map集合 用来存储需要传送到前端的数据
        Map<String,Object> map=new HashMap();
        //查询所有的内容
        map.put("queryallApp1",queryAllList);
        //一共的数据条数
        map.put("totalCount",taotalCount);
        //一共多少页数
        map.put("taotalPage",tataoPage);
        //页码
        map.put("pageNum",pageNumber);
        //模糊查询的条件传出去，用来继续选择页数
        map.put("querySoftwareName",querySoftwareName);
        map.put("checkFlat",checkFlat);
        map.put("queryCategoryLevel1",queryLevel1);
        map.put("queryCategoryLevel2",queryCategoryLevel2);
        map.put("queryCategoryLevel3",queryCategoryLevel3);
        //错误信息
        map.put("index",index);

        session.setAttribute("pageResult",map);

        return "backend/applist";
    }


    /**
     * ajax请求，用来查询数据库内一共有多少种平台信息
     * @param response
     * @throws IOException
     */
    @RequestMapping("/checkfloat")
    public void checkFloat(HttpServletResponse response) throws IOException {

        List<DataDictionary> checkFloat=backUserService.checkFloat();

        response.getWriter().print(JSONArray.toJSON(checkFloat));

    }

    /**
     * ajax请求 用来查询一级分类的下拉列表
     * @param response
     * @throws IOException
     */
    @RequestMapping("/checkLevel1")
    public void checkLecel1(HttpServletResponse response) throws IOException {

        List<AppCategory> checkLevel=backUserService.checkLevel1();

        response.getWriter().print(JSONArray.toJSON(checkLevel));

    }

    /**
     * ajax请求 用来查询二级分类的下拉列表
     * @param response
     * @param level1
     * @throws IOException
     */
    @RequestMapping("/checkLevel2")
    public void checkLevel2(HttpServletResponse response,@RequestParam("level1") String level1) throws IOException {

        List<AppCategory> checkLevel2=backUserService.checkLevel2(level1);

        response.getWriter().print(JSONArray.toJSON(checkLevel2));

    }

    /**
     * ajax请求 用来查询三级分类的下拉列表
     * @param response
     * @param level2
     * @throws IOException
     */
    @RequestMapping("/checkLevel3")
    public void checkLevel3(HttpServletResponse response,@RequestParam("level2") String level2) throws IOException {

       List<AppCategory> checkLevel3=backUserService.checkLevel3(level2);

        response.getWriter().print(JSONArray.toJSON(checkLevel3));

    }

    /**
     * app的审核方法
     * @param versionId app的版本id
     * @param id app的id
     * @param versionNo  app的本本号
     * @param versionStatus  app的版本状态值
     * @param session
     * @return
     */
    @RequestMapping("/updateStatus")
    public String updateStatus(@RequestParam("versionId") String versionId,@RequestParam("id") String id,
                               @RequestParam("versionNo")String  versionNo,
                               @RequestParam("versionStatus")int versionStatus
                               ,HttpSession session){
   //判断app是否有新的版本号，或者app的版本id不为空，app的状态一定要为未审核
        if (versionNo!=null&&versionId!=""&&versionStatus==1){

            //通过版本id去查询需要审核的app的基础信息
        List<AppInfo> checkApp=backUserService.checkApp(versionId);

            //通过app 的id去查询需要审核的app的最新版本信息
         List<AppVersion> checkVersion=backUserService.checkVersion(id);
            //定义一个map集合用来存放数据
            Map<String,Object> map2=new HashMap();

            map2.put("chechkApp",checkApp);

             map2.put("checkVersion",checkVersion);
               session.setAttribute("check",map2);
              return  "backend/appcheck";
       }else {

            return InternalResourceViewResolver.REDIRECT_URL_PREFIX+"/queryAllApp?index=6636";
        }

         }

    /**
     * app的审核通过、审核不通过、返回界面。
     * @param id
     * @param status
     * @return
     */
    @RequestMapping("/checksave")
    public String checkSave(@RequestParam("id") String id,@RequestParam(value = "status") int status){

        if (status==2) {
            int result = backUserService.checkSave(id);

            return InternalResourceViewResolver.REDIRECT_URL_PREFIX + "/queryAllApp";
        }if (status==3){

             int result=backUserService.checkSaves(id);

            return InternalResourceViewResolver.REDIRECT_URL_PREFIX + "/queryAllApp";

        }if (status==4) {

            return InternalResourceViewResolver.REDIRECT_URL_PREFIX + "/queryAllApp";
        }
        return null;
    }

    }